package org.dromara.hm.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.dromara.hm.domain.bo.HmSaleOrderRefundBo;
import org.dromara.hm.domain.vo.SalespersonRefundStatsVo;
import org.dromara.hm.domain.vo.saleOrder.HmSaleOrderPickUpVo;
import org.dromara.hm.domain.vo.saleOrder.HmSaleOrderRefundVo;
import org.dromara.hm.domain.vo.saleOrder.HmSaleOrderVo;
import org.dromara.hm.domain.vo.HmStockVo;
import org.dromara.hm.domain.vo.HmTodoItemsVo;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;

/**
 * 统计Mapper接口
 *
 * @author
 * @date
 */

@Mapper
public interface StatisticsMapper
{

    BigDecimal selectSaleSort(@Param("id") Long id, String date);

    List<HmSaleOrderVo> selectProductSort(@Param("size") Integer size, String date, String productId);

    BigDecimal selectPersonSort(Long id, String date);

    List<HmSaleOrderVo> selectPersonServerSort(Integer size);

    Map<String, String> selectManager(Long createDept);

    List<HmSaleOrderVo> selectVoList(LocalDate targetLocalDate);

    BigDecimal querySaleOrderCount(String date, Long userId);

    List<HmSaleOrderPickUpVo> queryList2(@Param("id") Long id, String date, @Param("size") Integer size);

    List<HmSaleOrderPickUpVo> queryList5(@Param("id") Long id, String date, @Param("size") Integer size);

    List<HmTodoItemsVo> queryList7(Long id, String date);

    Integer selectSaleNum(Long id, String date);

    int selectStockNum(Long productId, Long productDept);

    List<HmStockVo> queryStockDetail(Long productId);

    BigDecimal querySaleReturnCount(String date, Long userId);

    List<HmSaleOrderPickUpVo> queryListProductRepayment(Long id, Long productId, String date, @Param("size") Integer size);

    BigDecimal queryListProductRepaymentTotal(Long id, Long productId, String date);

    BigDecimal queryList2Total(Long id, String date);

    BigDecimal queryList5Total(Long id, String date);

    /**
     * 查询退款退货统计数据
     * @param dateMode year或month
     * @param date 年份或年月 (YYYY 或 YYYY-MM)
     * @param storeId 店铺ID
     * @return 统计数据列表
     */
    List<Map<String, Object>> queryRefundStats(
        @Param("dateMode") String dateMode,
        @Param("date") String date,
        @Param("storeId") String storeId
    );

    /**
     * 分页查询退款退货明细列表
     * @param page 分页对象
     * @param bo 查询条件
     * @return 退款退货明细分页列表
     */
    IPage<HmSaleOrderRefundVo> queryRefundDetails(IPage<HmSaleOrderRefundVo> page, @Param("bo") HmSaleOrderRefundBo bo);

    /**
     * 查询按销售人员统计的退款退货数据
     * @param date 年份或年月 (YYYY 或 YYYY-MM)
     * @param storeId 店铺ID
     * @return 按销售人员统计的数据列表
     */
    List<SalespersonRefundStatsVo> queryRefundStatsBySalesperson(
        @Param("date") String date,
        @Param("storeId") String storeId
    );
}
